﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ABC_SA_DM;
using System.Data.SqlClient;

namespace ABC_SA_DAL
{
    public class Usuario_DAL
    {
        /// <summary>
        ///  Agregar Usuario en la tabla USUARIO. Además es llamado en paralelo con
        ///  el rol de usuario en otra tabla
        /// 
        /// ROL:
        /// 1- Administrador
        /// 2- Cliente
        /// 3- Proveedor
        /// 
        /// </summary>
        /// <param name="usuario">Clase de tipo usuario</param>
        /// <param name="rol">Variable de Tipo de usuario en el sistema, 1= Administrador, 2= Cliente, 3= Proveedor </param>
        
        //******************Procedimientos almacenados******************//
        
        //metodo que agrega un usuario en la base de datos
        public bool agregarUsuario(Usuario usuario)
        {
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            try {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "InsertaUsuario";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Connection = conn;

                SqlParameter spUsuario = new SqlParameter();
                spUsuario.ParameterName = "@usuario";
                spUsuario.Value = usuario.UserName;
                spUsuario.Direction = System.Data.ParameterDirection.Input;
                spUsuario.DbType = System.Data.DbType.String;

                SqlParameter spContrasena = new SqlParameter();
                spContrasena.ParameterName = "@contrasena";
                spContrasena.Value = usuario.Contrasena;
                spContrasena.Direction = System.Data.ParameterDirection.Input;
                spContrasena.DbType = System.Data.DbType.String;

                SqlParameter spRol = new SqlParameter();
                spRol.ParameterName = "@rol";
                spRol.Value = usuario.Rol;
                spRol.Direction = System.Data.ParameterDirection.Input;
                spRol.DbType = System.Data.DbType.Int32;

                cmd.Parameters.Add(spUsuario);
                cmd.Parameters.Add(spContrasena);
                cmd.Parameters.Add(spRol);

                cmd.ExecuteNonQuery();

                conn.Close();
                return true;
            }
            catch (Exception e) 
            {
                conn.Close();
                return false;
            }
        }

        //elimina eñ usuario de la base de datos
        public bool eliminarUsuario(String usuario) {
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "EliminaUsuario";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Connection = conn;

                SqlParameter spElimina = new SqlParameter();
                spElimina.ParameterName = "@usuario";
                spElimina.Value = usuario;
                spElimina.Direction = System.Data.ParameterDirection.Input;
                spElimina.DbType = System.Data.DbType.String;

                cmd.Parameters.Add(spElimina);

                cmd.ExecuteNonQuery();

                conn.Close();
                return true;
            }
            catch (Exception e)
            {
                conn.Close();
                return false;
            }
        
        }

        //consulta el usuario por medio del primary key
        public Usuario consultarUsuario(String usuario) { 
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();
            Usuario u = new Usuario();

            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "ConsultarUsuario";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Connection = conn;

                SqlParameter spUsuario = new SqlParameter();
                spUsuario.ParameterName = "@userName";
                spUsuario.Value = usuario;
                spUsuario.Direction = System.Data.ParameterDirection.Input;
                spUsuario.DbType = System.Data.DbType.String;

                cmd.Parameters.Add(spUsuario);

                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    u.UserName = Convert.ToString(reader.GetValue(0));
                    u.Contrasena = Convert.ToString(reader.GetValue(1));
                    u.Rol = Convert.ToInt32(reader.GetValue(2));
                }

                conn.Close();
                return u;
            }
            catch (Exception e)
            {
                u = null;
                conn.Close();
                return u;
            }
        }

        //se conecta a la base valida el usuario y el password y devuelve un bool dependiendo de si lo encontro o no
        public bool inicioSesion(string userName, string pass) {
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "InicioSesion";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Connection = conn;

                SqlParameter spUsuario = new SqlParameter();
                spUsuario.ParameterName = "@userName";
                spUsuario.Value = userName;
                spUsuario.Direction = System.Data.ParameterDirection.Input;
                spUsuario.DbType = System.Data.DbType.String;

                SqlParameter spPass = new SqlParameter();
                spPass.ParameterName = "@contrasena";
                spPass.Value = pass;
                spPass.Direction = System.Data.ParameterDirection.Input;
                spPass.DbType = System.Data.DbType.String;

                cmd.Parameters.Add(spUsuario);
                cmd.Parameters.Add(spPass);

                SqlDataReader reader = cmd.ExecuteReader();

                if (reader.Read() == true)
                {
                    conn.Close();
                    return true;
                }
                else {
                    conn.Close();
                    return false;
                }
            }
            catch (Exception e)
            {
                conn.Close();
                return false;
            }
        }
    }
}
